package com.learn.base;
//互斥锁:
//当存在多个线程操作共享数据时，需要保证同一时刻有且只有一个线程在操作共享数据，其他线程必须等到该线程处理完数据后再进行，这种方式有个高尚的名称叫互斥锁
public class SynchronizedDemo implements Runnable {
    static int i = 0;

    //public synchronized void increase() {
    public  void increase() {
        i++;
    }

    public void run() {
        for(int j = 0;j<100000;j++) {
            increase();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        //只能操作同一个对象，不可以new2次操作，两个不同的实例对象锁是不用的，锁失效
        SynchronizedDemo sd = new SynchronizedDemo();
        Thread t1 = new Thread(sd);
        Thread t2 = new Thread(sd);
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println(i);
    }
}
